semaphore chopsticks[5] = {1,1,1,1,1}; 		//初始化信号量

void philosopher(int i){
  do {
    //thinking	   //思考.....饿了想吃饭....
    P(chopsticks[i]);       //申请哲学家左边的筷子是否可用
    P(chopsticks[(i+1)%5]); //申请哲学家右边的筷子是否可用
    //...
    //eat		//进餐
    //...
    V(chopsticks[i]);       //释放左手边的筷子
    V(chopsticks[(i+1)%5]); //释放右手边的筷子
  }while(true);
}

semaphore chopsticks[5] = {1,1,1,1,1}; 		//初始化信号量
semaphore count = 4;	//控制最多允许四位哲学家同时进餐

void philosopher(int i){
  do {
    //thinking		//思考
    p(count);		//最多限制4位哲学家同时就餐(count--)，当count为0时，不能允许有哲学家再动筷子
    /*走到这里，说明该哲学家可以就餐了*/
    P(chopsticks[i]);	    //请求左手的筷子
    P(chopsticks[(i+1)%5]); //请求右手的筷子
    //...
    //eat			//进餐
    //...
    V(chopsticks[i]);       //释放左手边的筷子
    V(chopsticks[(i+1)%5]); //释放右手边的筷子
    V(count);               //用餐完毕，释放信号量count，count++
  }while(true);
}

